package com.realtyreg.service.validator;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

/**
 * Проверяет, что значение строкового поля:
 * <ul>
 * <li>является элементом Enum-а type (проверяются все значения Enum-а)</li>
 * или (если не задан type)
 * <li>входит в указанный массив допустимых значений values</li>
 * </ul>
 * Created by Petro 03.01.13 22:52
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = EnumFieldValidator.class)
@Documented
public @interface EnumField {
    String message() default "{EnumField.default.message}";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    /**
     * @return Enum с допустимыми значениями
     * Default-ное значение - Enum.class (workaround)
     */
    Class<? extends Enum> type() default Enum.class;

    /**
     * @return Массив с допустимыми значениями. Используется только если не указан type.
     */
    String[] values() default {};
}
